package main

import "fmt"

// go循环语句
func main() {
	//计算1到10的数字之和
	println("=================================")
	sum := 0
	for i := 0; i <= 10; i++ {
		sum += i
	}
	fmt.Println(sum)

	println("=================================")
	sum1 := 1
	for sum1 <= 10 {
		sum1 += sum1
	}
	fmt.Println(sum1)

	//这样写也可以，更像while语句形式
	println("=================================")
	sum2 := 3
	for sum2 <= 10 {
		sum2 += sum2
	}
	fmt.Println(sum2)

	//无线循环
	//sum3 := 0
	//for {
	//	sum3++ //无限循环下去
	//}
	//fmt.Println(sum3)  //无法输出

	//For-each range循环
	//这种格式的循环可以对字符串、数组、切片等进行迭代输出元素。
	println("=================================")
	strings := []string{"google", "runoob"}
	for i, s := range strings {
		fmt.Println(i, s)
	}

	println("=================================")
	numbers := [6]int{1, 2, 3, 5}
	for i, x := range numbers {
		fmt.Printf("第 %d 位 x 的值 = %d\n", i, x)
	}

	//for循环的range格式可以省略key和value，如下
	println("=================================")
	map1 := make(map[int]float32)
	map1[1] = 1.0
	map1[2] = 2.0
	map1[3] = 3.0
	map1[4] = 4.0
	//读取key和value
	for key, value := range map1 {
		fmt.Printf("key is : %d - value is : %f\n", key, value)
	}

	//读取key
	println("=================================")
	for key := range map1 {
		fmt.Printf("key is : %d\n", key)
	}

	//读取value
	println("=================================")
	for _, value := range map1 {
		fmt.Printf("value is : %f\n", value)
	}

	//Go 语言循环嵌套
	//使用循环嵌套来输出2到100之间的素数
	println("=================使用循环嵌套来输出2到100之间的素数================")
	var i, j int
	for i = 2; i < 100; i++ {
		for j = 2; j <= (i / j); j++ {
			if i%j == 0 {
				break //如果发现因子，则不是素数
			}
		}
		if j > (i / j) {
			fmt.Printf("%d 是素数\n", i)
		}
	}

	//无限循环
	//for true {
	//	fmt.Printf("这是无限循环。\\n")
	//}
}
